home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGSCAL / TBUTIL2.LZH / MEMDISP.PAS < prev    next >
Pascal/Delphi Source File  |  1984-07-13  |  3KB  |  119 lines

  1. PROGRAM Memory_Display;
  2.  
  3. {  This program displays the contents of memory onto the IBM PC's screen.   }
  4. {  The user may move though the memory by using the Page Up, Page Dn, Home, }
  5. {  End, Left, Right, Up Arrow and Down Arrow keys.                          }
  6.  
  7. {  July 10, 1984.  Jeff Firestone.                                          }
  8.  
  9. CONST
  10.   EndOfMem          = $9F88;   { Top of mem. (640K) less one page (1920) }
  11.   MonoChromeScreen  = $B00A;   { Location of MonoChrome Card + 1 line }
  12.   ColorGraphScreen  = $B80A;   { Location of Color Graphics Card + 1 line }
  13.   Esc               = #27;
  14.  
  15. VAR
  16.   i                 : INTEGER;
  17.   Done              : BOOLEAN;
  18.   Mptr, Scrn, Pntr  : ^CHAR;
  19.  
  20.  
  21. {-------------------------------------------------------------}
  22.  
  23. PROCEDURE Adjust(Pseg, Pofs : INTEGER);
  24. VAR
  25.   SegAdr, OfsAdr : INTEGER;
  26. BEGIN
  27.   SegAdr:= MEMW[Pseg:Pofs+2];
  28.   OfsAdr:= MEMW[Pseg:Pofs];
  29.   IF (OfsAdr < 0) THEN
  30.     BEGIN
  31.       OfsAdr:= 15;
  32.       SegAdr:= SegAdr - 1;
  33.     END;
  34.   SegAdr:= (SegAdr + (OfsAdr SHR 4));
  35.   OfsAdr:= (OfsAdr AND 15);
  36.   MEMW[Pseg:Pofs]:= OfsAdr;
  37.   MEMW[Pseg:Pofs+2]:= SegAdr;
  38. END;
  39.  
  40. {-------------------------------------------------------------}
  41.  
  42. PROCEDURE ShowHex(a:INTEGER);
  43. CONST
  44.   HEX = '0123456789ABCDEF';
  45. VAR
  46.   inter,i : BYTE;
  47.  
  48. BEGIN
  49.    FOR i := 1 TO 4 DO
  50.    BEGIN
  51.      inter := a SHR 12;
  52.      a     := a SHL 4;
  53.      WRITE (COPY(hex,inter+1,1));
  54.    END;
  55. END;
  56.  
  57. {-------------------------------------------------------------}
  58.  
  59. PROCEDURE ReadCommand;
  60. CONST
  61.   PageSz = 120;
  62.   LineSz = 5;
  63.   CharSz = 1;
  64. VAR
  65.   key              : CHAR;
  66.   SegMptr, OfsMptr : INTEGER;
  67.  
  68. BEGIN
  69.   SegMptr:= MEMW[SEG(Mptr):OFS(Mptr)+2];
  70.   OfsMptr:= MEMW[SEG(Mptr):OFS(Mptr)];
  71.   READ(KBD, key);
  72.   IF KEYPRESSED THEN
  73.     BEGIN
  74.       READ(KBD, key);
  75.       CASE key OF
  76.         'Q' : SegMptr:= SegMptr + PageSz;  { Page Dn }
  77.         'I' : SegMptr:= SegMptr - PageSz;  { Page Up }
  78.         'P' : SegMptr:= SegMptr + LineSz;  { Down Arrow }
  79.         'H' : SegMptr:= SegMptr - LineSz;  { Up Arrow   }
  80.         'M' : OfsMptr:= OfsMptr + CharSz;  { Right Arrow }
  81.         'K' : OfsMptr:= OfsMptr - CharSz;  { Left Arrow  }
  82.         'G' : BEGIN SegMptr:= 0;        OfsMptr:= 0; END;  { Home }
  83.         'O' : BEGIN SegMptr:= EndOfMem; OfsMptr:= 0; END;  { End  }
  84.       END;
  85.     END;  { IF KeyPressed }
  86.  
  87.     MEMW[SEG(Mptr):OFS(Mptr)+2]:= SegMptr;
  88.     MEMW[SEG(Mptr):OFS(Mptr)]  := OfsMptr;
  89.     Adjust(SEG(Mptr),OFS(Mptr));
  90.  
  91.   IF (key = Esc) THEN Done:= TRUE;
  92. END;  { PROCEDURE ReadCommand }
  93.  
  94. {-------------------------------------------------------------}
  95.  
  96. BEGIN
  97.   Done:= FALSE;
  98.   MEMW[SEG(Mptr):OFS(Mptr)+2]:= 0; MEMW[SEG(Mptr):OFS(Mptr)]:= 0;
  99.   REPEAT
  100.     Pntr:= Mptr;
  101.     GOTOXY(27,1);
  102.     WRITE('Memory Address = ');
  103.     ShowHex(MEMW[SEG(Mptr):OFS(Mptr)+2]);
  104.     WRITE(':');
  105.     ShowHex(MEMW[SEG(Mptr):OFS(Mptr)]);
  106.     CLREOL;
  107.     MEMW[SEG(Scrn):OFS(Scrn)+2]:= ColorGraphScreen;
  108.     MEMW[SEG(Scrn):OFS(Scrn)]:= 0;
  109.     FOR i:= 0 TO 1920 DO
  110.     BEGIN
  111.       Scrn^:= Pntr^;
  112.       MEMW[SEG(Pntr):OFS(Pntr)]:= MEMW[SEG(Pntr):OFS(Pntr)] + 1;
  113.       MEMW[SEG(Scrn):OFS(Scrn)]:= MEMW[SEG(Scrn):OFS(Scrn)] + 2;
  114.     END;
  115.     ReadCommand;
  116.   UNTIL Done;
  117.   CLRSCR;
  118. END.
  119.